home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / dev / c / libiconv_src.lha / src / java.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-11-07  |  1.3 KB  |  64 lines

  1. /*
  2.  * JAVA
  3.  * This is ISO 8859-1 with \uXXXX escape sequences, denoting Unicode characters.
  4.  */
  5.  
  6. static int
  7. java_mbtowc (conv_t conv, wchar_t *pwc, const unsigned char *s, int n)
  8. {
  9.   unsigned char c;
  10.   wchar_t wc;
  11.   int i;
  12.  
  13.   c = s[0];
  14.   if (c != '\\') {
  15.     *pwc = c;
  16.     return 1;
  17.   }
  18.   if (n < 2)
  19.     return RET_TOOFEW(0);
  20.   if (s[1] != 'u')
  21.     goto simply_backslash;
  22.   wc = 0;
  23.   for (i = 2; i < 6; i++) {
  24.     if (n <= i)
  25.       return RET_TOOFEW(0);
  26.     c = s[i];
  27.     if (c >= '0' && c <= '9')
  28.       c -= '0';
  29.     else if (c >= 'A' && c <= 'Z')
  30.       c -= 'A'-10;
  31.     else if (c >= 'a' && c <= 'z')
  32.       c -= 'a'-10;
  33.     else
  34.       goto simply_backslash;
  35.     wc |= (wchar_t) c << (4 * (5-i));
  36.   }
  37.   *pwc = wc;
  38.   return 6;
  39. simply_backslash:
  40.   *pwc = '\\';
  41.   return 1;
  42. }
  43.  
  44. static int
  45. java_wctomb (conv_t conv, unsigned char *r, wchar_t wc, int n)
  46. {
  47.   if (wc < 0x80) {
  48.     *r = wc;
  49.     return 1;
  50.   } else {
  51.     if (n >= 6) {
  52.       unsigned int i;
  53.       r[0] = '\\';
  54.       r[1] = 'u';
  55.       i = (wc >> 12) & 0x0f; r[2] = (i < 10 ? '0'+i : 'a'-10+i);
  56.       i = (wc >> 8) & 0x0f;  r[3] = (i < 10 ? '0'+i : 'a'-10+i);
  57.       i = (wc >> 4) & 0x0f;  r[4] = (i < 10 ? '0'+i : 'a'-10+i);
  58.       i = wc & 0x0f;         r[5] = (i < 10 ? '0'+i : 'a'-10+i);
  59.       return 6;
  60.     } else
  61.       return RET_TOOSMALL;
  62.   }
  63. }
  64.